package com.atguigu.gulimall.product;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

/*1、整合Mybatis-Plus
   1、导入依赖
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.2.0</version>
        </dependency>
   2、配置
       1、配置数据源
            1）、导入驱动
            2)、配置 application.yml
                        spring:
                            datasource:
                            username: root
                            password: root
                            url: jdbc:mysql://192.168.28.130:3306/gulimall_pms
                            driver-class-name: com.mysql.cj.jdbc.Driver
        2、配置Mybatis-Plus 告诉mapper接口位置
            1、@MapperScan("com.atguigu.gulimall.product.dao")
            2、sql映射文件位置  yml中
                mybatis-plus:
                    mapper-locations: classpath*:/mapper*//**//**.xml
                    global-config:
                        db-config:
                            id-type: auto

 mybatisplus有逻辑删除
 在application.yml里面配置
 配置逻辑删除的组件Bean(省略)
 在实体类的具体状态字段上面加上@TableLogic注解


 模版引擎：
    thymeleaf-starter:关闭了缓存
         thymeleaf:
         cache: false
    这样在开发期间就可以实时看到变化

    静态资源都放在static文件夹下就可以按照路径直接访问

    页面放在templates下，也可以直接访问

    SpringBoot，访问项目的时候，默认会找index

    页面修改不重启服务器实时更新：引入 dev-tools，并设置为true
     <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-devtools</artifactId>
     <optional>true</optional>
     </dependency>
    (一共几个步骤 thymeleaf关闭cache 引入dev-tools 设置true 以及每次修改后Ctrl+F9 重新构建)
 */
/**
 * 整合redis
 * pom加入依赖
 * yml填写host port password等信息
 * 使用SpringBoot自动配置好的RedisTemplate(RedisTemplate和StringRedisTemplate)
 * k-v机制
 */

/**
 * 动静分离优化：
 * 约定以下几个规则：
 * 1、以后所有项目的静态资源都应该放在nginx里面
 * 2、/static/***下的所有请求都nginx直接返回
 * 一个是index.html里面的文件指向要改/static/前缀
 * 还有nginx里面配置文件对应要加location /static/{root linux上文件位置}
 *
 * 如果JVM设置内存大小合理，那么将不会频繁GC，动静分离能非常大的提升并发性能
 */
/**
 * 整合SpringCache简化缓存开发
 * 引入依赖
 * <dependency>
 *             <groupId>org.springframework.boot</groupId>
 *             <artifactId>spring-boot-starter-cache</artifactId>
 *         </dependency>
 * 写配置
 *      自动配置
 *          CacheAutoConfiguration会带入RedisCacheConfiguration：
 *              自动配好了@Bean    RedisCacheManager
 *              @ConfigurationProperties(prefix = "spring.cache")
 *
 *              spring.cache.type=redis  还有其他属性可以设置
 *      测试使用缓存 五个注解
 *     @Cacheable 触发将数据保存到缓存的操作
 *     @CacheEvict 触发将数据从缓存删除的操作
 *     @CachePut 不影响方法执行更新缓存
 *     @Caching 组合以上多个操作
 *     @CacheConfig 在类级别共享缓存的相同配置
 *
 *     原理
 *     CacheAutoConfiguration->RedisCacheConfiguration->RedisCacheManager
 *      RedisCacheManager 一开始初始化所有的缓存->每个缓存决定使用什么配置
 *      ->如果redisCacheConfiguration有就用已有的，没有就用默认的（
 *          如果我们不指定redisCacheConfiguration，那么默认会使用JdkSerializationRedisSerializer
 *          那么我们存的值在redis中使用的就是jdk默认的序列化）
 *      ->想改配置只需要给容器中加上redisCacheConfiguration，让RedisCacheConfiguration有参构造
 *      ->就会应用到当前当前的CacheManager(RedisCacheManager) 管理的所有缓存分区中
 *      我们自己新建一个MyRedisCacheConfiguration,配置这一个之后会出现原本配置文件中的配置会失效
 *      会用我新构建的这一个CacheConfiguration
 *
 *     1、开启缓存功能
 *      @EnableCaching
 *     2、使用注解就能完成缓存操作
 */
@EnableFeignClients(basePackages = "com.atguigu.gulimall.product.feign")
@EnableDiscoveryClient
@MapperScan("com.atguigu.gulimall.product.dao")
@SpringBootApplication
public class GulimallProductApplication {

    public static void main(String[] args) {
        SpringApplication.run(GulimallProductApplication.class, args);
    }

}
